<?php

namespace app\api\controller;

use app\BaseController;
use think\Request;
use think\facade;
use app\common\model\User;
use app\common\lib\GetToken;

/**
 * 登录的逻辑处理
 * Class Login
 * @package app\api\controller
 */
class Login extends BaseController
{

    /**
     * 用户登录接口
     * @return string
     * @author bjy
     */
    public function check()
    {
        // 参数检验 1、原生方式  2、TP6 验证机制
        $username = $this->request->param("username", "", "trim");//用户名
        $password = $this->request->param("password", "", "trim");//密码
        $phone    = $this->request->param("phone", "18329730510", "trim");//用户手机号
        $code     = $this->request->param("code", 123456, "intval");//验证码
        $type     = $this->request->param("type", 0, "intval");//用户的登录方式

        //获取用户数据
        $UserModel = new User();

        //根据登录类型进行用户登录验证
        switch ($type) {
            case 1://账密登录
                //查询用户基本信息
                $adminUserInfo = $UserModel->getInfoByUsername($username);
                //判断是否用户存在
                if (empty($adminUserInfo)) {
                    return show(-100, '用户不存在');
                }
                //对象转数组
                $adminUserInfo = $adminUserInfo->toArray();
                //判断密码是否正确
                if ($adminUserInfo['password'] != md5($password . '_bjy')) {
                    return show(-100, '密码错误');
                }
                break;
            case 0://验证码登录逻辑处理
                //先检查redis内的user_code是否存在
                $redisCode = cache(config('redis.front_code_pre') . $phone);
                if (empty($redisCode) || $redisCode != $code) {
                    return show(-100, 'code码错误');
                }

                //再检查使用该手机号的用户是否存在
                $adminUserInfo = $UserModel->getInfoByPhone($phone);
                //判断是否用户存在
                if (empty($adminUserInfo)) {
                    return show(-100, '用户不存在');
                }
                //对象转数组
                $adminUserInfo = $adminUserInfo->toArray();
                break;
            default:
                return show(-100, '搞飞机呢你在');
        }

        //更新用户表的登录方式、最后一次的登录时间、登录ip地址
        $updateData   = array(
            'type'            => $type,//登录方式 默认0 手机号码登录 1账密登录
            'last_login_time' => time(),//更新最后一次的登录时间
            'last_login_ip'   => $this->request->ip(),//更新最后一次的登录ip地址
            'update_time'     => time(),//更新时间
        );
        $updateResult = $UserModel->updateById($adminUserInfo['id'], $updateData);
        if (empty($updateResult)) {
            return show(-100, '登录失败');
        }

        //记录要存储到redis内的数据信息
        $token     = GetToken::getUerLoginToken($adminUserInfo['username']);//生成token
        $redisData = [
            'id'       => $adminUserInfo['id'],//用户id
            'username' => $adminUserInfo['username'],//用户账号
            'token'    => $token,
        ];
        //token记录到redis
        $res = cache(config('redis.front_token_pre') . $token, $redisData, config('redis.front_login_expire'));
        if (!$res) {
            return show(-100, '记录redis出错');
        }

        return show(200, '登录成功', cache(config('redis.front_token_pre') . $token));
    }

    public function getInfo()
    {
        session('adminUser', null);
        dd(session('adminUser'));
    }

    /**
     * 检测是否登录
     * @param Request $request
     * @return object
     * @author bjy
     */
    public function check1(Request $request)
    {
        return show(200, '登录成功');
    }

}
